# -*- coding: utf-8 -*-

import imn_conf
import imn_xmpp
import time
import string

def init_cli():
    print "Iniciando interface de linha de comando"

    run_cli()

    
def run_cli():
    exit_cli = False

    xmpp_client = imn_xmpp.imn_xmpp()
    cli = {'username':"",'password':"",'xmpp_client':xmpp_client}
    user_data_conf = {}
    while not exit_cli:
        user_input = raw_input("imnext: ")
        user_tokens = user_input.split()
        exit_cli = do_action(user_tokens, cli, user_data_conf)


def read_token(tokens):
    tok = None
    try:
        tok = tokens.pop(0)
    except:
        print 'Esperado resto do comando'

    return tok

def read_token_message(tokens):
    message = ""
    message = string.join(tokens," ")

    return message
    
def do_action( user_tokens, cli, user_data_conf ):
    return_code = False
    tok = read_token(user_tokens)
    # Carregar configurações
    if tok == 'read':
        tok = read_token(user_tokens)
        if tok == 'conf': 
            user_data_conf = imn_conf.read_conf()

            if user_data_conf != {}:
                cli['username'], cli['password'] = user_data_conf['username'], user_data_conf['password']
                for each in user_data_conf['friends_list']:
                    cli['xmpp_client'].add_friend(each)
                show_username(cli['username'])
            else:
                print 'Não existe arquivo de configuração'
        else:
            print 'Opção desconhecida'
    elif tok == 'write':
        tok = read_token(user_tokens)
        if tok == 'conf':
            if user_data_conf is None:
                user_data_conf = imn_conf.read_conf()

            imn_conf.fill_conf_data( cli['xmpp_client'], user_data_conf )

            imn_conf.write_conf( user_data_conf )
        else:
            print 'Opção desconhecida'
    elif tok == 'set':
        tok = read_token(user_tokens)
        if tok == 'user_info':
            username = read_token(user_tokens)
            password = read_token(user_tokens)

            if username is not None or password is not None:                
                cli['username'], cli['password'] = username, password
                show_username(cli['username'])
            else:
                print 'Nome de usuário ou password não fornecidos'
        else:
            print 'Opção desconhecida'
    # Connect
    elif tok == 'connect':
        
        cli['xmpp_client'].init( cli['username'],
                                 cli['password'] )
        
        if cli['xmpp_client'].connect() == False:
            print "Não conectei"
            return False
        else:
            print "Conectei"

    elif tok == 'show':
        tok = read_token(user_tokens)
        if tok == 'friends_list':
            if cli['xmpp_client'] != None and cli['xmpp_client'].is_connected():
                try:
                    print cli['xmpp_client'].get_friends_list()
                except:
                    print 'Você não tem nenhuma amigo registrado'
            else:
                print "Cliente não conectado"
        else:
            print 'Opção desconhecida: ' + tok
    # Send
    elif tok == 'send':
        tok = read_token(user_tokens)
        if tok == 'message':
            if cli['xmpp_client'].is_connected():
                to_user = read_token(user_tokens)
                message = read_token_message(user_tokens)
                cli['xmpp_client'].send_message(to_user, message)
            else:
                print "Cliente não conectado"
        else:
            print 'Opção desconhecida: ' + tok
    # Add
    elif tok == 'add':
        tok = read_token(user_tokens)
        if tok == 'friend':
            tok = read_token(user_tokens)
            cli['xmpp_client'].add_friend(tok)
        else:
            print 'Opção desconhecida: ' + tok

    elif tok == 'exit':
        return_code = True
    else:
        print 'Opção desconhecida: ' + tok


    return return_code


def show_username(username):
    print "Utilizando usuario " + username

